#ifndef  HELPER_OBJECT_STANDARDOBJECTFACTORY_H
#define  HELPER_OBJECT_STANDARDOBJECTFACTORY_H


#include <memory>
#include <string>
#include "helper/object/ObjectFactory.h"

namespace helper {
namespace object {

class String;
class Array;

class StandardObjectFactory : public ObjectFactory{
public:
    static std::shared_ptr<ObjectFactory> make();

    StandardObjectFactory();
    ~StandardObjectFactory();

    std::string toString() const override;

    String * createString(const std::string & str) const override;
    String * createString(const char * str) const override;
    String * createString(const char * buffer, size_t len) const override;
    String * createString(const char * buffer, size_t offset, size_t len) const override;
    String * createString(size_t n, const char ch) const override;
    String * createString() const override;

    Array * createArray() const override;
    Hash * createHash() const override;

    Byte * createByte(const char val) const override;
    Integer * createInteger(const long long val) const override;
    Double * createDouble(const double val) const override;
    Pointer * createPointer(const void * val) const override;
};

} // end of namespace object
} // end of namespace helper

#endif   /* HELPER_OBJECT_STANDARDOBJECTFACTORY_H */
